vim.g.mapleader = " "
vim.g.maplocalleader = " "
local map = vim.keymap
local opt = { noremap = true, silent = true }

map.set("", "<space>", "<Nop>", opt)

-- 基础键位
map.set("i", "jj", "<C-[>", opt)
-- map.set("i", "jk", "<C-[>", opt)
--map.set("n", "<leader>", ":", opt)
map.set("n", "<leader><leader>", "/", opt)
--map.set("n", "<leader>/", ":nohlsearch<CR>", opt)
map.set("i", "\\\\", "<C-[>/<++><CR>:nohlsearch<CR>c4l", opt)
map.set("i", "AA", "<C-[>I", opt)
map.set("i", "LL", "<C-[>A", opt)
map.set("v", "<leader><leader>", "<C-[>", opt)
map.set("n", "<leader>0", ":set wrap!<CR>", opt)
map.set("n", "v", "<C-v>", opt)
map.set("v", "p", "P", opt)
map.set("n", "P", "o<C-[>p", opt)

-- 可视模式下行的收尾 & 页面的收尾跳转
map.set("v", "-", "$", opt)
map.set("v", "L", "$", opt)
map.set("v", "H", "0", opt)
map.set("v", "J", "G", opt)
map.set("v", "K", "gg", opt)

-- 等待操作模式下行的收尾 & 页面的收尾跳转
map.set("o", "-", "$", opt)
map.set("o", "H", "0", opt)
map.set("o", "L", "$", opt)
map.set("o", "J", "G", opt)
map.set("o", "K", "gg", opt)

map.set("n", "W", "5w", opt)
map.set("n", "e", "b", opt)
map.set("n", "E", "5b", opt)

-- 普通模式下行的收尾 & 页面的收尾跳转
map.set("n", "-", "$", opt)
map.set("n", "L", "$", opt)
map.set("n", "H", "0", opt)
map.set("n", "J", "G", opt)
map.set("n", "K", "gg", opt)

map.set("v", "<C-j>", ":m '>+1<CR>gv=gv", opt)
map.set("v", "<C-k>", ":m '<-2<CR>gv=gv", opt)
map.set("x", "<C-j>", ":m '>+1<CR>gv=gv", opt)
map.set("x", "<C-k>", ":m '<-2<CR>gv=gv", opt)

--windown
--map.set("n", "<leader>wh", "<C-w>h", opt)
--map.set("n", "<leader>wj", "<C-w>j", opt)
--map.set("n", "<leader>wk", "<C-w>k", opt)
--map.set("n", "<leader>wl", "<C-w>l", opt)
--map.set("n", "<leader>wH", "<C-w>H", opt)
--map.set("n", "<leader>wJ", "<C-w>J", opt)
--map.set("n", "<leader>wK", "<C-w>K", opt)
--map.set("n", "<leader>wL", "<C-w>L", opt)
--map.set("n", "<leader>wc", ":close<CR>", opt)
--map.set("n", "<leader>wn", "<C-w>n", opt)
--map.set("n", "<leader>wo", "<C-w>o", opt)

map.set("n", "Y", "yiw", opt)
map.set("n", "D", "diw", opt)
map.set("n", "C", "ciw", opt)
map.set("n", "))", "ci(", opt)
map.set("n", "]]", "ci[", opt)
map.set("n", "}}", "ci{", opt)
map.set("n", "''", "ci'", opt)
map.set("n", '""', 'ci"', opt)

map.set("i", "<c-h>", "<left>", opt)
map.set("i", "<c-j>", "<down>", opt)
map.set("i", "<c-k>", "<up>", opt)
map.set("i", "<c-l>", "<right>", opt)

map.set("n", "j", "gj", opt)
map.set("n", "k", "gk", opt)

-- 窗口间的跳转
map.set("n", "<C-h>", "<C-w>h", opt)
map.set("n", "<C-j>", "<C-w>j", opt)
map.set("n", "<C-k>", "<C-w>k", opt)
map.set("n", "<C-l>", "<C-w>l", opt)

map.set("i", "<C-d>", "<C-[>yypA", opt)
map.set("i", "<C-a>", "<C-[>ggVG", opt)
map.set("n", "<C-a>", "ggVG", opt)
map.set("v", "<C-a>", "<C-[>ggVG", opt)

map.set("i", "<leader>\\", "<C-[>o", opt)
map.set("i", "<leader><leader>\\", "<C-[>O", opt)

map.set("n", "<leader>h", ":h<Space>", opt)

map.set("n", "U", "<C-r>", opt)

--map.set("n", "::", ":ToggleTerm<CR>", opt)

-- map.set("i", "(", "()<C-[>i", opt)
-- map.set("i", "[", "[]<C-[>i", opt)
-- map.set("i", "{", "{}<C-[>i", opt)
-- map.set("i", "{{", "{}<++><C-[>F}i<CR>", opt)
-- map.set("i", "'", "''<C-[>i", opt)
-- map.set("i", '"', '""<C-[>i', opt)

-- Alpha
-- map.set("n", "<leader>,", ":Alpha<CR>", opt)

-- neotree
--map.set("n", "<C-e>", "<cmd>Neotree toggle<cr>", opt)

-- telescope
--local builtin = require("telescope.builtin")
--map.set("n", "<leader>fs", builtin.find_files, {})
--map.set("n", "<leader>fb", builtin.buffers, {})
--map.set("n", "<leader>fh", builtin.help_tags, {})
--map.set("n", "<leader>fg", builtin.live_grep, {})
--map.set("n", "<leader>ff", builtin.oldfiles, {})

-- lvim.api.nvim_set_keymap("n", "<leader>1", ":BufferLineGoToBuffer 1<CR>", { noremap = true, silent = true })
-- lvim.api.nvim_set_keymap("n", "<leader>2", ":BufferLineGoToBuffer 2<CR>", { noremap = true, silent = true })
-- lvim.api.nvim_set_keymap("n", "<leader>3", ":BufferLineGoToBuffer 3<CR>", { noremap = true, silent = true })
-- lvim.api.nvim_set_keymap("n", "<leader>4", ":BufferLineGoToBuffer 4<CR>", { noremap = true, silent = true })
-- lvim.api.nvim_set_keymap("n", "<leader>5", ":BufferLineGoToBuffer 5<CR>", { noremap = true, silent = true })
-- lvim.api.nvim_set_keymap("n", "<leader>6", ":BufferLineGoToBuffer 6<CR>", { noremap = true, silent = true })
-- lvim.api.nvim_set_keymap("n", "<leader>7", ":BufferLineGoToBuffer 7<CR>", { noremap = true, silent = true })
-- lvim.api.nvim_set_keymap("n", "<leader>8", ":BufferLineGoToBuffer 8<CR>", { noremap = true, silent = true })
-- lvim.api.nvim_set_keymap("n", "<leader>9", ":BufferLineGoToBuffer 9<CR>", { noremap = true, silent = true })
-- lvim.api.nvim_set_keymap("n", "<leader>bg", ":BufferLinePick<CR>", { noremap = true, silent = true })

vim.api.nvim_set_keymap("n", "gt", ":BufferLineCycleNext<CR>", { noremap = true, silent = true })
vim.api.nvim_set_keymap("n", "GT", ":BufferLineCyclePrev<CR>", { noremap = true, silent = true })

-- vimrc maps

vim.cmd([[
filetype on " 检测文件类型
let mapleader = " "
" This is maps setup of the Markdown ===
autocmd Filetype markdown inoremap <leader>ll <Enter>---<Enter><Enter>
autocmd Filetype markdown inoremap <leader>- <Enter>-<Space>
autocmd Filetype markdown inoremap <leader>= <Esc>0yf o<Esc>p0<C-a>$a
autocmd Filetype markdown inoremap ** ****<++><Esc>F*hi
autocmd Filetype markdown inoremap __ **<++><Esc>F*i
autocmd Filetype markdown inoremap ~~ ~~~~ <++><Esc>F~hi
autocmd Filetype markdown inoremap <leader>b ** <++><Esc>F*i
" autocmd Filetype markdown inoremap ` `` <++><Esc>F`i
autocmd Filetype markdown inoremap <leader>` <Enter>```<Enter><++><Enter>```<Enter><Enter><++><Esc>4kA
autocmd Filetype markdown inoremap <leader>pp ![](<++>) <++><Esc>F[a
autocmd Filetype markdown inoremap <leader>aa [](<++>) <++><Esc>F[a
autocmd Filetype markdown inoremap <leader>1 #<Space><Enter><Enter><++><Esc>kkA
autocmd Filetype markdown inoremap <leader>2 ##<Space><Enter><Enter><++><Esc>kkA
autocmd Filetype markdown inoremap <leader>3 ###<Space><Enter><Enter><++><Esc>kkA
autocmd Filetype markdown inoremap <leader>4 ####<Space><Enter><Enter><++><Esc>kkA
autocmd Filetype markdown inoremap <leader>mk  :MarkdownPreview<CR>
]])

